package la.iok.hzsvn.lewin.movie.service;

import la.iok.hzsvn.lewin.movie.core.Token;
import la.iok.hzsvn.lewin.movie.entity.AppPackage;
import la.iok.hzsvn.lewin.movie.model.AppPackageParam;
import la.iok.hzsvn.lewin.movie.model.Version;
import la.iok.hzsvn.lewin.mybatis.model.PageVo;
import la.iok.hzsvn.lewin.mybatis.service.BaseService;
import la.iok.hzsvn.share.annotations.NotNull;
import la.iok.hzsvn.share.annotations.Nullable;

import javax.servlet.http.HttpServletResponse;

public interface AppPackageService extends BaseService<AppPackage,Long> {
    /**
     * 保存程序包
     * @param token 操作用户
     * @param param 程序包参数
     * @return 新记录的id
     */
    Long save(@NotNull Token token, @NotNull AppPackageParam param);

    /**
     * 删除程序包
     * @param token 操作用户
     * @param id 程序包id
     */
    void delete(@NotNull Token token, Long id);

    /**
     * 查询程序的版本
     * @param appName 应用名称
     * @param packageType 程序包类型
     * @param productType 产品类型
     * @return 版本
     */
    @Nullable
    Version version(@Nullable String appName, @Nullable String packageType, @Nullable String productType);

    /**
     * 设置为最新版本
     * @param token 操作用户
     * @param id 应用id
     */
    void latest(@NotNull Token token, @Nullable Long id);

    PageVo<AppPackage> page(int page, int limit);

    void downloadZipPackage(HttpServletResponse response, Long id);
}
